﻿using System;
using System.Collections.Generic;
using NHibernate;

namespace CRC.Inspecciones.Dominio.Controlador
{
    class ControladorListarSeguimientoInspecciones
    {
        private static String strQryAños = "select distinct year(hp.Fecha) from LineaSeguimientoInspeccion hp order by year(hp.Fecha) desc";
        public IList<Object[]> ListarTodo(int? pintAño, int? intSalon, int? intZona) 
        {
            ISession session = null;
            ITransaction tx = null;
            IList<Object[]> infoSeguimiento = null;
            String hql = String.Empty;
            Boolean añoNulo, salonNulo, zonaNula;
            try {

                añoNulo = pintAño == null;
                salonNulo = intSalon == null;
                zonaNula = intZona == null;

                session = CRC.NHibernate.NHibernateHelper.GetCurrentSession();
                tx = session.BeginTransaction();

                hql = "select lse.Id, lse.Salon.Zona.Nombre, lse.Salon.Nombre_Salon, lse.Fecha, lse.Estado.Descripcion " ;
                hql += " from LineaSeguimientoInspeccion lse ";

                if (!añoNulo) { hql += " where YEAR(lse.Fecha)=" + pintAño; }
                if (!salonNulo) { hql += (añoNulo ? " where " : " and ") + " lse.Salon.Id='" + intSalon + "'"; }
                if (!zonaNula) { hql += ((añoNulo && salonNulo) ? " where " : " and ") + " lse.Salon.Zona.Id=" + intZona; }

                 hql +=  " order by lse.Salon.Zona.Nombre asc, lse.Salon.Nombre_Salon asc, lse.Fecha desc";

                infoSeguimiento = (IList<Object[]>)session.CreateQuery(hql).List<Object[]>();

                tx.Commit();
                return infoSeguimiento;

            }
            catch (HibernateException he) {

                if (tx != null) { tx.Rollback(); }
                if (session != null) session.Close();
                throw he;
            }
        }

        public IList<int> ObternerAñosSeguimientos()
        {
            ISession session = null;
            IList<int> años = null;

            try
            {
                session = CRC.NHibernate.NHibernateHelper.GetCurrentSession();

                años = session.CreateQuery(strQryAños).List<int>();
                return años;
            }
            catch (HibernateException ex)
            {
                if (session != null) session.Close();
                throw ex;
            }
        }
    }
}
